/**
 * author: Hanflyee  flyee1980@163.com
 * vision: v1.0
 * data: 2009-7-9
 */
package com.flyee.controller.timer{
	
	import com.flyee.model.Charactor;
	import com.flyee.utils.ArrayUtil;
	import com.flyee.viewer.CharactorViewer;
	
	import flash.events.TimerEvent;
	import flash.utils.Timer;

	/**
	 * 人物移动TIMER 
	 */
	public class WalkTimer extends Timer{
		
		/**方向*/
		public var direct : int = 0;
		
		/**帧, 总共8帧,0-7*/
		public var frame : int = 0;
		
		/**相关的人物数据*/
		public var char : Charactor;
		
		/**相关的人物UI*/
		public var charViewer : CharactorViewer;
		
		/**人物移动路径数组*/
		public var path : Array;
		
		/**TIMER状态,是否运行中*/
		public var status : Boolean = false;
	
		public function WalkTimer(delay:Number, repeatCount:int=0){
			super(delay, repeatCount);
		}
		
		/**
		 * 暂停行走
		 * 走完未走完的这一步， 然后停下来
		 */
		 public function pause() : void {
		 	if(!status){
		 		path.splice(1, path.length - 1);
		 	}
		 }
		
		/**
		 * 设置路径
		 * 如果TIMER处于停止状态, 新的路径数组直接接到路径中, 然后启动TIMER运行
		 * 如果TIMER处于运行状态, 保留路径中正在移动的方向的数据, 删掉之后的元素, 再接到路径中
		 */
		public function setPath(arr : Array) : void{
			//判断是否在运行中
			if(status){						
				//保留路径中正在移动的方向的数据, 删掉之后的元素
				path.splice(1, path.length - 1);
				for(var i : int = 0 ; i < arr.length ; i++){
					path.push(arr[i]);
				}
				ArrayUtil.removeAll(arr);
			}else{				
				path = arr;
				this.start();
				this.status = true;
				char.moveStatus = true;
			}
		}
		
		/**每行走一格之后*/
		public function nextStep() : void {

			//如果是移动动作的最后一帧
			if(frame == 7){
				//当前帧清0
				frame = 0;
				//删除第1个路径方向, 准备下一格的方向
				path.shift();
				//如果没有下一个路径, 停止TIMER
				if(path.length==0){				
					this.stop();
					this.status = false;
					char.moveStatus = false;
				}
			}else{
				frame++;
			}
		}
		
		/**
		 * 取得当前人物深度 
		 */
		public function getCurrentDepth() : int {
			return path[0].depth;
		}
		
		/**
		 *	取得当前移动方向 
		 */
		public function getCurrentDirection() : int {
			return path[0].direction;
		}
		
		public override function reset() : void {
			super.reset();
			this.frame = 0;
			this.direct = 0;
			this.status = false;
			while(path.length>0){
				path.shift();
			}
		}
		
		/**
		 * 释放 
		 */
		public function dispose() : void {
			this.stop();
			this.char = null;
			this.charViewer = null;
			ArrayUtil.removeAll(this.path);
			this.path = null;
//			this.removeEventListener(TimerEvent.TIMER, 
		}
		
	}
}